import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:给你一个整数数组 nums 和一个整数 k ，请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
 * User: wangxin
 * Date: 2025-03-18
 * Time: 21:43
 */
public class Test {
    //堆排序
    public int[] topKFrequent(int[] nums, int k) {
        if(nums == null||k == 0){
            return null;
        }
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i < nums.length;i++){
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){
            @Override
            public int compare(Integer a,Integer b){
                return map.get(a) - map.get(b);
            }
        });
        for(Integer key : map.keySet()){
            if(pq.size() < k){
                pq.add(key);
            }else if(map.get(key) > map.get(pq.peek())){
                pq.remove();
                pq.add(key);
            }
        }
        int[] res = new int[k];
        for(int i = 0;i < k;i++){
            res[i] = pq.remove();
        }
        return res;
    }

}
